/*
 * @Author: zh
 * @Date: 2024-11-18 11:18:17
 * @LastEditors: zh
 * @LastEditTime: 2024-11-19 09:17:34
 * @Description: 
 */
// let nums = []

// for (let i = 0; i < 1; i++) {
//     // 生成一个0-179的有序数组
//   const arr = [...Array(10).keys()]
//   console.log(arr);
  
//   const res = []
//   while(arr.length){
//     // 打乱
//     const randomIndex = Math.random() * arr.length -1
//     console.log(arr.splice(randomIndex, 1),"randomIndex");
    
//     res.push(arr.splice(randomIndex, 1)[0]) 
//   }
//   console.log(res,"res");

// } 
js几种排序方法
    let arr = [1, 5, 3, 7, 9, 2, 4, 6, 8];
    // 冒泡排序

        for (let j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                let temp =arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }


    // 插入排序
    for (let i = 1; i < arr.length; i++) {
        let temp = arr[i];
        let j = i - 1;
        while (j >= 0 && arr[j] > temp) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = temp;
    }
    // 选择排序
    for (let i = 0; i < arr.length; i++) {
        let minIndex = i;
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex !== i) {
            let temp = arr[i];
            arr[i] = arr[minIndex];
        }
    }
    // 归并排序
    function mergeSort(arr) {
        if (arr.length <= 1) {
            return arr;
        }
        let mid = Math.floor(arr.length / 2);
        let left = arr.slice(0, mid);
        let right = arr.slice(mid);
        return merge(mergeSort(left), mergeSort(right));
    }

/**
 * 合并两个有序数组
 * @param {Array} left - 一个有序数组
 * @param {Array} right - 另一个有序数组
 * @returns {Array} - 返回一个合并后的有序数组
 */
function merge(left, right) {
    // 初始化结果数组
    let result = [];
    // 当两个数组都有元素时进行比较和合并
    while (left.length && right.length) {
        // 如果left数组的第一个元素小于等于right数组的第一个元素
        if (left[0] <= right[0]) {
            // 将left数组的第一个元素添加到结果数组中，并移除该元素
            result.push(left.shift());
        } else {
            // 否则将right数组的第一个元素添加到结果数组中，并移除该元素
            result.push(right.shift());
        }
    }
    // 当其中一个数组遍历完后，直接将另一个数组剩余的元素添加到结果数组中
    return result.concat(left, right);
}


